﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.Entity;
using PraxisRent.Entities;
using System.Data.OleDb;
using System.Data.Common;
using System.Data.SqlClient;

namespace PraxisRent.Repository
{
    public class PraxisRentDatabaseInitializer:DropCreateDatabaseAlways<PRAXISRENTContext>
    {
        protected override void Seed(PRAXISRENTContext context)
        {
            if (context == null)
                throw new ArgumentException("context");

            GetRol().ForEach(p=>context.ROLs.Add(p));
            GetOperador().ForEach(p => context.OPERADOR.Add(p));
            GetSexo().ForEach(p => context.SEXOs.Add(p));
            GetEstadoCivil().ForEach(p => context.ESTADO_CIVILs.Add(p));
            GetTipoComprobante().ForEach(p=>context.TIPO_COMPROBANTEs.Add(p));
            GetTipoPago().ForEach(p => context.TIPO_PAGOes.Add(p));
            GetTipoEquipo().ForEach(p => context.TIPO_EQUIPOes.Add(p));
            GetMarca().ForEach(p => context.MARCAs.Add(p));
            GetColor().ForEach(p => context.COLORes.Add(p));
            CargaMenu();
        }

            static List<ROL> GetRol()
            {
                var roles = new List<ROL>
                {
                    new ROL {Descripcion = "ADMINISTRADOR"},
                    new ROL {Descripcion = "ALMACEN"},
                    new ROL {Descripcion = "ALQUILER"}
                };
                return roles;
            }

            static List<OPERADOR> GetOperador()
            {
                var operadores = new List<OPERADOR>
                {
                    new OPERADOR {Descripcion = "MOVISTAR"},
                    new OPERADOR {Descripcion = "CLARO"},
                    new OPERADOR {Descripcion = "RPM"},
                    new OPERADOR {Descripcion = "RPC"}
                };
                return operadores;
            }

            static List<SEXO> GetSexo()
            {
                var sexos = new List<SEXO>
                {
                    new SEXO {Descripcion = "MASCULINO"},
                    new SEXO {Descripcion = "FEMENINO"}
                };
                return sexos;
            }

            static List<ESTADO_CIVIL> GetEstadoCivil()
            {
                var estCiviles = new List<ESTADO_CIVIL>
                {
                    new ESTADO_CIVIL {Descripcion = "SOLTERO(A)"},
                    new ESTADO_CIVIL {Descripcion = "CASADO(A)"},
                    new ESTADO_CIVIL {Descripcion = "DIVORCIADO(A)"},
                    new ESTADO_CIVIL {Descripcion = "VIUDO(A)"},
                    new ESTADO_CIVIL {Descripcion = "CONVIVIENTE"},
                    new ESTADO_CIVIL {Descripcion = "SEPARADO(A)"}
                };
                return estCiviles;
            }

            static List<TIPO_COMPROBANTE> GetTipoComprobante()
            {
                var tipComprobantes = new List<TIPO_COMPROBANTE>
                {
                    new TIPO_COMPROBANTE {Descripcion = "BOLETA"},
                    new TIPO_COMPROBANTE {Descripcion = "FACTURA"}
                };
                return tipComprobantes;
            }

            static List<TIPO_PAGO> GetTipoPago()
            {
                var tipPagos = new List<TIPO_PAGO>
                {
                    new TIPO_PAGO {Descripcion = "CONTADO"},
                    new TIPO_PAGO {Descripcion = "CREDITO"}
                };
                return tipPagos;
            }

            static List<TIPO_EQUIPO> GetTipoEquipo()
            {
                var tipEquipos = new List<TIPO_EQUIPO>
                {
                    new TIPO_EQUIPO {Descripcion = "MAQUINARIA"},
                    new TIPO_EQUIPO {Descripcion = "EQUIPO"}
                };
                return tipEquipos;
            }

            static List<MARCA> GetMarca()
            {
                var marca = new List<MARCA>
                {
                    new MARCA {Descripcion = "OTROS"},
                    new MARCA {Descripcion = "CATERPILLAR"},
                    new MARCA {Descripcion = "HONDA"},
                    new MARCA {Descripcion = "KOMATSU"},
                    new MARCA {Descripcion = "VOLVO"}
                };
                return marca;
            }

            static List<COLOR> GetColor()
            {
                var color = new List<COLOR>
                {
                    new COLOR {Descripcion = "OTROS"},
                    new COLOR {Descripcion = "AMARILLO"},
                    new COLOR {Descripcion = "NEGRO"},
                    new COLOR {Descripcion = "GRIS"}
                };
                return color;
            }

            public void CargaMenu()
            {
                string excelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0; Data Source='D:\PRAXISRENT\Menu.xls'; Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1'"; //Office 2003-2007
                //string excelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0; Data Source='C:\Data.xlsx'; Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1'"; // Office 2010-2012

                using (OleDbConnection connection = new OleDbConnection(excelConnectionString))
                {
                    OleDbCommand command = new OleDbCommand("SELECT `Hoja1$`.Descripcion, `Hoja1$`.Tag, `Hoja1$`.Comentario FROM `Hoja1$`", connection);

                    connection.Open();

                    // Create DbDataReader to Data Worksheet
                    using (DbDataReader dr = command.ExecuteReader())
                    {
                        // SQL Server Connection String
                        string sqlConnectionString = "Data Source=.;Initial Catalog=PRAXISRENT;Integrated Security=True";

                        // Bulk Copy to SQL Server
                        using (SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConnectionString, SqlBulkCopyOptions.TableLock))
                        {
                            bulkCopy.ColumnMappings.Add("Descripcion", "Descripcion");
                            bulkCopy.ColumnMappings.Add("Tag", "Tag");
                            bulkCopy.ColumnMappings.Add("Comentario", "Comentario");
                            bulkCopy.DestinationTableName = "MENU";
                            bulkCopy.WriteToServer(dr);
                        }
                    }
                }
            }
        }
    }
